package leetcode;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * description:
 * author:zt
 * date:2021-10-31
 */
//给你一个字符串数组 words ，只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
public class leetcode500 {
    private static int[] chars = new int[26];
    static {
        // 整理26个字母分别每一行对应1、2、3
        set("qwertyuiop", 1);
        set("asdfghjkl", 2);
        set("zxcvbnm", 3);
    }

    public String[] findWords(String[] words) {
        List<String> ans = new ArrayList<>();
        for (String word : words) {
            if (check(word)) {
                ans.add(word);
            }
        }
        return ans.toArray(new String[ans.size()]);
    }

    private static void set(String s, int value) {
        for (int i = 0; i < s.length(); i++) {
            chars[index(s.charAt(i))] = value;
        }
    }

    private static int index(char c) {
        if (c >= 'A' && c <= 'Z') {
            return c - 'A';
        } else {
            return c - 'a';
        }
    }

    private static boolean check(String s) {
        if (s.isEmpty()) {
            return true;
        }
        int val = chars[index(s.charAt(0))];
        for (int i = 1; i < s.length(); i++) {
            if (chars[index(s.charAt(i))] != val) {
                return false;
            }
        }
        return true;
    }
}
